﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using System.Resources;
using System.Data.Linq;
using CDStore3Tiers;

namespace CuaHangDiaNhac
{
	public partial class frmTaiKhoan : DevComponents.DotNetBar.Office2007Form
	{
		log4net.ILog log = log4net.LogManager.GetLogger("Tài khoản");
		XLTaiKhoan XLTK;
		StoreCDDataContext db;
		XuLyForm XL = new XuLyForm();
		List<TaiKhoan> list;

		public void lockLogin()
		{
			string id = frmLogin.id;
			XLPhanQuyen phanquyen = new XLPhanQuyen();
			List<TaiKhoanChucNang> tkcn = new List<TaiKhoanChucNang>();
			tkcn = phanquyen.TKChucNang(frmLogin.id);


			if (phanquyen.CoQuyen(id, 301))
			{
				btnThemTK.Enabled = true;
				ExAdd.Visible = true;
			}
			if (phanquyen.CoQuyen(id, 302))
			{
				ExRemove.Visible = true;
				tsDelete.Enabled = true;
			}
			if (phanquyen.CoQuyen(id, 303))
			{
				tsSave.Enabled = true;
				ExSave.Visible = true;
			}
			if (phanquyen.CoQuyen(id, 304))
			{
				btnResetMK.Visible = true;

			}
			if (phanquyen.CoQuyen(id, 305))
			{
				btnPhanQuyen.Visible = true;
			}
		}

		public void closeall()
		{
			btnThemTK.Enabled = false;
			ExAdd.Visible = false;
			ExRemove.Visible = false;
			tsDelete.Enabled = false;
			tsSave.Enabled = false;
			ExSave.Visible = false;
			btnPhanQuyen.Visible = false;
			btnResetMK.Visible = false;
		}

		public frmTaiKhoan()
		{

			XLTK = new XLTaiKhoan();
			InitializeComponent();
			db = new StoreCDDataContext();
			db.Connection.ConnectionString = getConfig.getConnection();
		}
		DataGridViewTextBoxColumn coID;
		DataGridViewTextBoxColumn coPassword;
		DataGridViewTextBoxColumn coTenNV;
		DataGridViewTextBoxColumn coChucVu;
		DataGridViewTextBoxColumn coQuyenHan;

		public void LoadDS()
		{
			cbxLocDL.SelectedIndex = 0;
			// db = new StoreCDDataContext();
			XLTK = new XLTaiKhoan();
			var taikhoan = db.TaiKhoan_SelectAll();
			// dgv.DataSource = taikhoan;
			BindingSource bs = new BindingSource();
			bs.DataSource = taikhoan;
			bindingNavigator1.BindingSource = bs;
			dgv.DataSource = bs;
		}

		public void loadDGV()
		{

			XLTK = new XLTaiKhoan();
			dgv.DataSource = null;

			coID = new DataGridViewTextBoxColumn();
			coID.DataPropertyName = "ID";
			coID.HeaderText = "Tài khoản";
			coID.Name = "cnameID";
            coID.ReadOnly = true;
			// coID.Visible = false;
			dgv.Columns.Add(coID);


			coPassword = new DataGridViewTextBoxColumn();
			coPassword.DataPropertyName = "Password";
			coPassword.HeaderText = "Mật khẩu";
			coPassword.Name = "cnamePassword";
			dgv.Columns.Add(coPassword);


			coTenNV = new DataGridViewTextBoxColumn();
			coTenNV.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			coTenNV.DataPropertyName = "TenNV";
			coTenNV.HeaderText = "Tên nhân viên";
			coTenNV.Name = "cnameNV";
			dgv.Columns.Add(coTenNV);


			coChucVu = new DataGridViewTextBoxColumn();
			coChucVu.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			coChucVu.DataPropertyName = "ChucVu";
			coChucVu.HeaderText = "Chức vụ";
			coChucVu.Name = "cnameCV";
			dgv.Columns.Add(coChucVu);


			coQuyenHan = new DataGridViewTextBoxColumn();
			coQuyenHan.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			coQuyenHan.DataPropertyName = "QuyenHan";
			coQuyenHan.HeaderText = "Quyền hạn";
			coQuyenHan.Name = "cnameQH";
            coQuyenHan.Visible = false;
			dgv.Columns.Add(coQuyenHan);


			LoadDS();

		}

		private void frmTaiKhoan_Activated(object sender, EventArgs e)
		{
			//   db = new StoreCDDataContext();
			loadDGV();
			List<String> ds1 = new List<string> { "Quản lý", "NV bán hàng", "NV giao hàng", "chủ cửa hàng", "admin", "khách hàng" };
			foreach (string cv in ds1)
			{
				cbbChucVu.Items.Add(cv);
			}

			//            List<String> ds2 = new List<string> { "1", "2", "3" };
			//            foreach (string cv in ds2)
			//            {
			//                cbbQuyenHan.Items.Add(cv);
			//            } 
		}

		private void frmTaiKhoan_Load(object sender, EventArgs e)
		{
			closeall();
			lockLogin();
			loadDGV();
			log.Info(frmLogin.id + ": đã load lên form tài khoản");
		}

		private void btnThemTK_Click(object sender, EventArgs e)
		{
			//   db = new StoreCDDataContext();
			TaiKhoan pq = new TaiKhoan();
			try
			{
				pq.ID = txtID.Text.ToString();
				pq.Password = txtPass.Text.ToString();
				pq.TenNV = txtTenNV.Text.ToString();
				pq.ChucVu = cbbChucVu.Text.ToString();
				// pq.QuyenHan = Convert.ToInt32(cbbQuyenHan.Text.ToString());
				db.TaiKhoans.InsertOnSubmit(pq);
				db.SubmitChanges();
				log.Info(frmLogin.id + ": đã thêm vào tài khoản " + pq.ID);
			}
			catch (Exception Ex)
			{
				//db.Transaction.Rollback();
				DevComponents.DotNetBar.MessageBoxEx.Show(Ex.Message, "Xảy ra lỗi trong quá trình thêm tài khoản!", MessageBoxButtons.OK, MessageBoxIcon.Error);
				log.Error(frmLogin.id + ": thêm tài khoản mới thất bại");
			}

			XLTK.ThemQuyenHanMacDinh(txtID.Text, cbbChucVu.Text);

			loadDGV();

		}

		private void timer1_Tick(object sender, EventArgs e)
		{
			checkOK.Visible = false;
			timer1.Stop();
		}

        private void tsDelete_Click(object sender, EventArgs e)
        {
            //     db = new StoreCDDataContext();
            TaiKhoan pq = new TaiKhoan();
            if (dgv.SelectedRows.Count > 0)
            {
                DialogResult accept = DevComponents.DotNetBar.MessageBoxEx.Show("Bạn có chắc chắn muốn xóa ?", "thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (accept == DialogResult.Yes)
                {
                    for (int i = 0; i < dgv.SelectedRows.Count; i++)
                    {
                        try
                        {
                            string selectID = dgv.SelectedRows[i].Cells["cnameID"].Value.ToString();
                            var xoatk = db.TaiKhoan_Delete(selectID);
                            log.Info(frmLogin.id + ": đã xóa tài khoản " + selectID);
                            // db.PhanQuyens.DeleteOnSubmit(pq);
                            db.SubmitChanges();
                        }
                        catch
                        {

                        }                        
                    }
                }
            }
            loadDGV();
        }

		private void tsRefesh_Click(object sender, EventArgs e)
		{
			loadDGV();
			log.Info(frmLogin.id + ": đã làm mới danh sách tài khoản");
		}

		private void tsSave_Click(object sender, EventArgs e)
		{
			try
			{
				XLTK.updateTaiKhoan(dgv);
				log.Info(frmLogin.id + ": đã cập nhật lại các tài khoản thay đổi");
			}
			catch (Exception Ex)
			{
				DevComponents.DotNetBar.MessageBoxEx.Show(Ex.Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);

			}
		}

		private void dgv_MouseDown(object sender, MouseEventArgs e)
		{
			DataGridView.HitTestInfo hit;//đối tượng cho biết thông tin hit trên datagridview
			if (e.Button == MouseButtons.Right)
			{ //bắt sự kiện chuột phải
				hit = dgv.HitTest(e.X, e.Y);//tạo đối tượng HTi
				if (hit.Type == DataGridViewHitTestType.Cell)
				{//Kiểm tra xem đối tượng HTi có đúng là kiểu Cell không
					if (!((DataGridViewRow)(dgv.Rows[hit.RowIndex])).Selected)
					{//kiểm tra xem row tại vị trí chuột có đúng là chưa chọn
						dgv.ClearSelection();//xóa chọn tất cả trên datagrid
						((DataGridViewRow)dgv.Rows[hit.RowIndex]).Selected = true;//xác lập chọn cho row tại vị trí nhấn chuột
					}
				}
			}
			if (dgv.SelectedRows.Count > 1)
				lockContextmenu(false);
			else
				lockContextmenu(true);
		}

		private void lockContextmenu(bool p)
		{
			btnF5.Enabled = p;
			btnSaveex.Enabled = p;
			btnAddex.Enabled = p;
			btnRemoveex.Enabled = p;
		}


		private void btnSaveex_Click_1(object sender, EventArgs e)
		{
			tsSave.PerformClick();
		}

		private void btnRemoveex_Click(object sender, EventArgs e)
		{
			tsDelete.PerformClick();
		}

		private void btnF5_Click(object sender, EventArgs e)
		{
			tsRefesh.PerformClick();
		}

		private void btnAddex_Click(object sender, EventArgs e)
		{
			navigationPane1.Expanded = true;
			exThemTK.Expanded = true;
		}

		public void loadDGVByCombobox()
		{
			XLTK = new XLTaiKhoan();
			//if (tsTimkiem.Text != "")
			//    XL.loadDGV(bindingNavigator1, dgv, XLTK.searchByID(list, tsTimkiem.Text));
			//else
			{
				list = XLTK.getBySoluong(cbxLocDL.SelectedIndex);
				XL.loadDGV(bindingNavigator1, dgv, list);
			}
		}

		private void cbxLocDL_SelectedIndexChanged(object sender, EventArgs e)
		{
			loadDGVByCombobox();
		}

		private void tsTimkiem_TextChanged(object sender, EventArgs e)
		{
			loadDGVByCombobox();
			XLTK = new XLTaiKhoan();
			XL.loadDGV(bindingNavigator1, dgv, XLTK.searchByID(list, tsTimkiem.Text));
		}

		private void tsTimkiem_MouseUp(object sender, MouseEventArgs e)
		{
			tsTimkiem.Clear();
		}

		private void tsTimkiem_Leave(object sender, EventArgs e)
		{
			if (string.IsNullOrEmpty(tsTimkiem.Text))
			{
				tsTimkiem.Text = "Tìm kiếm theo ID, tên nhân viên..";
				XL.loadDGV(bindingNavigator1, dgv, list);
			}
		}

		private void dgv_CellContentClick(object sender, DataGridViewCellEventArgs e)
		{

		}

		private void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
		{
			if (dgv.Columns[e.ColumnIndex].Name == "cnamePassword" && e.Value != null)
			{
				dgv.Rows[e.RowIndex].Tag = e.Value;
				e.Value = new String('*', e.Value.ToString().Length);
			}

			//dgv.Rows[e.RowIndex].Tag = e.Value;
			//e.Value = new String('*', e.Value.ToString().Length);
		}

		private void dgv_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
		{
			//if (e.ColumnIndex == 3)//select target column
			//{
			//    TextBox textBox = e.Control as TextBox;
			//    if (textBox != null)
			//    {
			//        textBox.UseSystemPasswordChar = true;
			//    }
			//}

		}

		private void btnPhanQuyen_Click(object sender, EventArgs e)
		{
			frmPhanQuyen fPhanQuyen = new frmPhanQuyen();

			if (dgv.SelectedRows.Count > 0)
			{
				foreach (DataGridViewRow r in dgv.SelectedRows)
				{
					string id = (r.Cells["cnameID"].Value.ToString());
					string tennv = (r.Cells["cnameNV"].Value.ToString());
					fPhanQuyen = new frmPhanQuyen(id, tennv);

				}
			}
			fPhanQuyen.ShowDialog(this);
		}

		private void btnResetMK_Click(object sender, EventArgs e)
		{
			frmPhanQuyen fPhanQuyen = new frmPhanQuyen();
			string id = "";
			if (dgv.SelectedRows.Count > 0)
			{
				foreach (DataGridViewRow r in dgv.SelectedRows)
				{
					id = (r.Cells["cnameID"].Value.ToString());
				}
				DialogResult accept = DevComponents.DotNetBar.MessageBoxEx.Show("Bạn có chắc muốn reset mật khẩu tài khoản " + id.ToString(), "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
				if (accept == DialogResult.Yes)
				{
					try
					{
						db.TaiKhoan_ResetMK(id);
						MessageBoxEx.Show("Đã reset thành công! Mật khẩu là : '1'");
						log.Info(frmLogin.id + ": đã reset mật khẩu tài khoản " + id);
					}
					catch (Exception ex)
					{
						MessageBoxEx.Show("Ops!! Đã xảy ra lỗi");
					}
				}


			}

		}
	}
}